Docker Compose Network 配置笔记
是的,即使两个服务不写在同一个 Docker Compose 配置文件中,也可以实现隔离。这种情况下,可以通过 自定义网络 来实现服务之间的隔离或 互通。
以下是如何在两个独立的 Docker Compose 配置文件中实现隔离的详细说明:
方法 1:完全隔离(不同网络)
如果两个服务完全独立,且不需要互相通信,可以将它们放在不同的 Docker 网络中:
配置文件 1 (docker-compose-service1.yml)
version: '3.9'
services:
app_service1:
image: my_app_service1_image # 替换为第一个服务的镜像
networks:
- network_service1
environment:
DATABASE_HOST: postgres_service1
DATABASE_PORT: 5432
DATABASE_USER: user1
DATABASE_PASSWORD: password1
DATABASE_NAME: db1
postgres_service1:
image: postgres:latest
container_name: postgres_service1
networks:
- network_service1
environment:
POSTGRES_USER: user1
POSTGRES_PASSWORD: password1
POSTGRES_DB: db1
ports:
- "5432:5432" # 可选:仅在需要从宿主机访问时映射端口
networks:
network_service1:
driver: bridge
配置文件 2 (docker-compose-service2.yml)
version: '3.9'
services:
app_service2:
image: my_app_service2_image # 替换为第二个服务的镜像
networks:
- network_service2
environment:
DATABASE_HOST: postgres_service2
DATABASE_PORT: 5432
DATABASE_USER: user2
DATABASE_PASSWORD: password2
DATABASE_NAME: db2
postgres_service2:
image: postgres:latest
container_name: postgres_service2
networks:
- network_service2
environment:
POSTGRES_USER: user2
POSTGRES_PASSWORD: password2
POSTGRES_DB: db2
ports:
- "5433:5432" # 可选:仅在需要从宿主机访问时映射端口
networks:
network_service2:
driver: bridge
启动服务
分别在两个配置文件所在的目录运行以下命令:
docker-compose -f docker-compose-service1.yml up -d
docker-compose -f docker-compose-service2.yml up -d
效果
- 两个服务被放在不同的网络中,完全隔离,无法直接通信。
- 如果需要从宿主机访问 PostgreSQL,可以通过
5432访问postgres_service1,通过5433访问postgres_service2。
方法 2:部分隔离(共享网络)
如果两个服务需要部分隔离,但仍需要通过网络通信,可以让它们共享一个 自定义网络。
创建共享网络
首先,创建一个共享网络:
docker network create shared_network
配置文件 1 (docker-compose-service1.yml)
version: '3.9'
services:
app_service1:
image: my_app_service1_image
networks:
- shared_network
environment:
DATABASE_HOST: postgres_service1
DATABASE_PORT: 5432
DATABASE_USER: user1
DATABASE_PASSWORD: password1
DATABASE_NAME: db1
postgres_service1:
image: postgres:latest
container_name: postgres_service1
networks:
- shared_network
environment:
POSTGRES_USER: user1
POSTGRES_PASSWORD: password1
POSTGRES_DB: db1
ports:
- "5432:5432"
networks:
shared_network:
external: true
配置文件 2 (docker-compose-service2.yml)
version: '3.9'
services:
app_service2:
image: my_app_service2_image
networks:
- shared_network
environment:
DATABASE_HOST: postgres_service2
DATABASE_PORT: 5432
DATABASE_USER: user2
DATABASE_PASSWORD: password2
DATABASE_NAME: db2
postgres_service2:
image: postgres:latest
container_name: postgres_service2
networks:
- shared_network
environment:
POSTGRES_USER: user2
POSTGRES_PASSWORD: password2
POSTGRES_DB: db2
ports:
- "5433:5432"
networks:
shared_network:
external: true